Hugo Taxonomies 是一種「內容分群」的功能,它能將散落於網站不同 Section 中的 Content Page,將其分群在同一頁呈現 (Grouping),下面會舉個簡單的例子,來介紹 Taxonomies 的使用情境。
Hugo 預設提供了以下兩種 Taxonomy:
指定方式如下 (以 YAML 格式為例):
---
title: "Sample"
categories: ["foo", "bar"]
tags: ["foo", "bar"]
---
content
若使用者不想要使用預設的 Taxonomy,有兩種方式可以將它關閉:
[taxonomies]
)disableKinds
)這邊所謂「關閉」,概念上指的是把 http://your.baseurl.blog/{taxonomy}
這個頁面給關掉。
你可以從 config 配置自己想要啟用的 Taxonomy,「覆蓋掉」預設的設置,以下是「只啟用 tags
」的例子:
[taxonomies]
tag = "tags"
以本例設置來說,官方預設的 categories 就會變得無法被公開存取:http://your.baseurl.blog/categories
(404),因為預設配置已經被 config 所取代。
若是想要完全關閉 Taxonomy 功能,可以配置 disableKinds
:
disableKinds = ["taxonomy", "term"]
如前言所述 Hugo Taxonomies 能幫助我們將散落在不同 Section 中的文章抓在同一頁呈現,舉例來說,假設你的個人部落格有以下網站結構與內容:
+ 首頁 (Homepage)
+ 旅遊美食 Travel and Foods (Section, ./content/travel-n-foods)
+ 2020 網友票選前十名巷弄咖啡 (Content, ./content/travel-n-foods/2020-top-10-coffee)
+ 經典不敗超推必吃早午餐 (Content, ./content/travel-n-foods/awesome-brunch)
+ 限時團購 Group Buying (Section, ./content/group-buying)
+ 巴西黑麻麻咖啡豆熱烈揪團中 (Content, ./content/group-buying/brazilian-coffee)
+ 玩具開箱 Toys Introdution (Section, ./content/toys-introduction)
+ 麵包超人等身公仔(可食用) (Content, ./content/toys-introduction/eatable-anpanman)
當你瀏覽網址為 http://your.baseurl.blog/travel-n-foods
時,頁面就會列出匹配 ./content/travel-n-foods/*.md
這路徑的所有文章:
- 2020 網友票選前十名巷弄咖啡 (Content, /travel-n-foods/2020-top-10-coffee)
- 經典不敗超推必吃早午餐 (Content, /travel-n-foods/awesome-brunch)
現在假設每篇 Content Page 都有設置 Front Matter tags
,例如:
# 2020 網友票選前十名巷弄咖啡.md Front Matter
---
title: "2020 網友票選前十名巷弄咖啡"
tags: ["food", "coffee"]
---
...
當你瀏覽網址為 http://your.baseurl.blog/tags
時,頁面就會列出設置了 tags
的所有文章:
+ food
+ 2020 網友票選前十名巷弄咖啡 (Content, /travel-n-foods/2020-top-10-coffee)
+ 經典不敗超推必吃早午餐 (Content, /travel-n-foods/awesome-brunch)
+ 巴西黑麻麻咖啡豆熱烈揪團中 (Content, /group-buying/brazilian-coffee)
+ 麵包超人等身公仔(可食用) (Content, /toys-introduction/eatable-anpanman)
+ coffee
+ 2020 網友票選前十名巷弄咖啡 (Content, /travel-n-foods/2020-top-10-coffee)
+ 巴西黑麻麻咖啡豆熱烈揪團中 (Content, /group-buying/brazilian-coffee)
當你瀏覽網址為 http://your.baseurl.blog/tags/coffee
時,頁面就會列出設置了 tags
中包含 coffee
的所有文章:
- 2020 網友票選前十名巷弄咖啡 (Content, /travel-n-foods/2020-top-10-coffee)
- 巴西黑麻麻咖啡豆熱烈揪團中 (Content, /group-buying/brazilian-coffee)
Hugo 讓我們可依據需求,自行創建自己想要的分類法,命名與創建方式如下:
單數名詞: "複數名詞"
例如筆者想創建一個 Taxonomy,名為「product」 :
[taxonomies]
category = "categories"
tag = "tags"
product = "products"
請注意,你必須在此定義網站中,所有使用到的 taxonomy,此配置是「覆蓋設定」,它會完全取代 Hugo 預設的配置,若你沒有列舉出原本預設 Taxonomy,而又有使用到它的話,http://your.baseurl.blog/{taxonomy} 頁面就會無法存取 (變成 404)。
此時我們就可以使用新的設置:
# 巴西黑麻麻咖啡豆熱烈揪團中.md Front Matter
---
title: "巴西黑麻麻咖啡豆熱烈揪團中"
tags: ["food", "coffee"]
products: ["drink", "coffee"]
---
...
若佈景沒有實作 Taxonomy Terms Template 的 layout,有可能會無法正常顯示 Taxonomy 的頁面列表,請參考官方關於 Taxonomy Templates 的說明。
最後舉個使用 Hugo Taxonomy 的場景,假設今天筆者想為網站增添一個新的選單 (HTML Links),連結文字為「Restaurants」,筆者想把這個連結放在 Menu 選單中,透過追加以下 config 配置:
[taxonomies]
category = "categories"
tag = "tags"
restaurant = "restaurants"
[[menu.main]]
name = "Restaurants"
weight = 66
identifier = "restaurants"
url = "/restaurants/"
新增一篇文章 ./content/post/the-best-beef-noodle-from-ancestor.md
:
---
title: "祖傳牛肉麵"
restaurants:
- "beef noodle"
---
祖傳牛肉麵...
瀏覽網址: